//包装类初识：
//除了 Integer 和 Character， 其余基本类型的包装类都是首字母大写。

public class Test {
    //包装类：
    //一道面试题：阿里巴巴：
    public static void main1(String[] args) {
        Integer a = 100;
        Integer b = 100;
        System.out.println(a == b);
        Integer a1 = 200;
        Integer b1 = 200;
        System.out.println(a1 == b1);
        //打印结果是：true false


        //在Java中有缓存机制，Integer类中还有IntegerCache这个内部类，这个内部类中还有Cache数组,这个数组范围是基本数据的范围，比如IntegerCache.low与IntegerCahce.high
        //是int范围的最高与最低，所以范围就是[-128,127]。
        //总共是256个数据
        /*
        Integer部分的源码：
         static final int low = -128;
        static final int high;
        static final Integer cache[];


         public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
         */
        //若i等于-128，则所在Cache数组0下标对应数据为-128，(-IntegerCache.low)表示的是[-(-128)]
        //只要不超过int的数据范围，那么就可以直接在这个数组将值直接获取，所以a和b两者是同一个的地址的值，a1和b1的值超过了int的数据范围，
        //那么就重新返回新的值，所以两次的值的地址会不一样
    }


    public static void main2(String[] args) {
        //装箱：把一个基本数据类型转化为包装类型的过程,分为自动装箱和显示装箱

        //自动装箱：
        int a = 10;
        Integer b = a;
        System.out.println(b);

        //显示装箱：
        Integer c = Integer.valueOf(a);
        System.out.println(c);
        //自动装箱和显示装箱都是用valueOf方法
    }

    public static void main(String[] args) {
        //拆箱：把包装类型转化为基本数据类型的过程，分为自动拆箱和显示拆箱：

        //自动拆箱：
        Integer a = new Integer(10);
        int b = a;
        System.out.println(b);

        //显示拆箱：必须要拆箱为指定的类型：
        int c = a.intValue();
        System.out.println(c);
        double d = a.doubleValue();
        System.out.println(d);
    }
}